Video coding standards employ prediction and block-based transforms to leverage redundancy in intra/inter frame correlation and achieve high compression efficiency. Furthermore, entropy coding makes the coded bit-stream achieve its entropy boundary and further improves the coding efficiency.
An important usage of entropy coding in video coding system is the coding of the quantized transform coefficients of a block, which is the residual data block after intra/inter prediction, block transform, and quantization. For such data, entropy coding tools have been developed, ranging from variable length coding, such as the Huffman coding, to arithmetic coding. The state-of-the-art CABAC (context-adaptive binary arithmetic coding) achieves high coding efficiency, but the non-systematic implementation of the CABAC coding procedure results in two scanning passes being performed to code a data block.
CABAC is the entropy coding method for the quantized transform coefficient block in the International Organization for Standardization/International Electrotechnical Commission (ISO/IEC) Moving Picture Experts Group-4 (MPEG-4) Part 10 Advanced Video Coding (AVC) Standard/International Telecommunication Union, Telecommunication Sector (ITU-T) H.264 Recommendation (hereinafter the “MPEG-4 AVC Standard”). CABAC codes a block in two main passes. In the first pass, CABAC codes the significance map of the block according to a forward zigzag scanning order. In the second pass, CABAC codes the non-zero values in an inverse zigzag scanning order.
Turning to FIG. 1, an example of CABAC coding is indicated generally by the reference numeral 100. In the significance map coding pass, i.e., the first pass, CABAC uses the sig_flag and last_flag to indicate the positions of the non-zero coefficients.
In the inverse zigzag coding of the non-zero values, two sub-coding processes are used. In the first sub-coding process, a syntax called Bin_1 (i.e., the first bin) is used to indicate whether or not a non-zero coefficient has an absolute value of one. If the non-zero coefficient has an absolute value of one, then Bin_1=1 and the sign of the non-zero coefficient is sent out. Otherwise, Bin_1=0 and the encoding moves to the second sub-coding process. In the second sub-coding process, CABAC codes the coefficients which have an absolute value greater than one, corresponding to Bin_1=0, and then sends out their respective signs.
The disadvantage of CABAC is that the corresponding coding involves two scanning passes (i.e., a forward zigzag scan to code the significance map, and an inverse zigzag scan to code values). In addition, the design of CABAC is mainly for smaller block sizes (e.g., 4×4 and 8×8). CABAC turns out to be less efficient for larger blocks (e.g., 16×16, 32×32, and 64×64).
One prior art approach proposes adding a flag to signal the last position of a discrete cosine transform (DCT) coefficient greater than one. However, the prior art approach is restricted to a flag greater than one and still uses two scanning passes.